package com.deductive.mapper.dynamic;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * 动态表操作Mapper
 * 用于处理任意表结构的通用增删改查
 */
@Repository
public interface DynamicTableMapper {

    /**
     * 通用分页查询
     * @param tableName 表名
     * @param columns 要查询的字段列表，如果为null或空，则查询所有字段(*)
     * @param conditions 匹配查询条件 (key: 字段名, value: 字段值)
     * @return 查询结果列表
     */
    List<Map<String, Object>> selectPage(
            @Param("tableName") String tableName,
            @Param("columns") List<String> columns,
            @Param("conditions") List<Map<String, Object>> conditions
    );

    /**
     * 通用插入方法
     * @param tableName 表名
     * @param data 要插入的数据 (key: 字段名, value: 字段值)
     * @return 受影响的行数
     */
    int insert(@Param("tableName") String tableName, @Param("data") Map<String, Object> data);

    /**
     * 通用更新方法
     * @param tableName 表名
     * @param data 要更新的数据 (key: 字段名, value: 字段值)
     * @param conditions 更新条件 (key: 字段名, value: 字段值)
     * @return 受影响的行数
     */
    int update(
            @Param("tableName") String tableName,
            @Param("data") Map<String, Object> data,
            @Param("conditions") List<Map<String, Object>> conditions
    );

    /**
     * 通用删除方法
     * @param tableName 表名
     * @param conditions 删除条件 (key: 字段名, value: 字段值)
     * @return 受影响的行数
     */
    int delete(@Param("tableName") String tableName, @Param("conditions") List<Map<String, Object>> conditions);
}

